# 内置函数
print('绝对值函数：abs()\n结果：', abs(-1), abs(1.1), abs(123 - 12j))
m = [1, 1, 1]
n = []
o = [1, 0, 1]
print('判断可迭代对象是否所有元素为真值：all(iterable)')
print('结果：', all(m), all(n), all(o), '\n')
print('判断可迭代对象是否所有元素存在真值：any(iterable)')
print('结果：', any(m), any(n), any(o), '\n')
print('ascii码返回一个包含对象的可打印表示形式的字符串：ascii(object)')
print('结果：', ascii('a'), '\n')

print('返回一个包含对象的可打印表示形式的字符串：repr(object)')
print('结果：', repr("s"), '\n')

print('10进制转2进制：bin(x)')
print('结果：', bin(10), '\n')

print('10进制转16进制：hex(x)')
print('结果：', hex(10), hex(250), '\n')

print('10进制转8进制：oct(x)')
print('结果：', oct(10), oct(250), '\n')

print('真值转换：class bool([x])')
print('结果：', bool('a'), bool(1), bool(0), bool([]), bool({}), bool(''), '\n')
# print('真值转换：class int([x])\n结果：', bool('a'), bool(1), bool(0), bool([]), bool({}), bool(''))
print('返回从数字或字符串 x 生成的浮点数：class float([x])')
print('结果：', float('1.1'), float(1), float(0), '\n')

print('转换为整数：class int([x])')
print('结果：', int('1'), int(1.4), int(0), '\n')

print('转换为字符串：class str([x])')
print('结果：', str('1'), str(1.4), str(0), '\n')

print('转换为元祖：class tuple([iterable])')
print('结果：', tuple('abdsja'), tuple([12, 3, 4, 'g']), '\n')

print('转换为列表，或定义列表：class list([x])')
print('结果：', list('1'), list(range(10)), '\n')

# print('真值转换：class complex([x])\n结果：', bool('a'), bool(1), bool(0), bool([]), bool({}), bool(''))
# print('调试器函数：breakpoint(*args, **kws)\n结果：')
print('可变序列，返回bytes 数组：class bytearray([source[, encoding[, errors]]])')
print('结果：', bytearray('ss'.encode()), bytearray([123]), bytearray([]), '\n')
print('不可变序列，返回bytes对象：class class bytes([source[, encoding[, errors]]])')
print('结果：', bytearray('ss'.encode()),
      bytearray([123]), bytearray([]), '\n')


def foo():
    return 11


class A():
    def __call__(self, *args, **kwargs):
        return 23


print('判断对象是否可调用：callable(object)\n说明：如果实例所属的类有 __call__() 则它就是可调用的')
print('结果：', callable(m), callable(foo()), callable(A()), '\n')

print('unicode码对应的整数转字符：chr(i)')
print('结果：', chr(97), chr(65), chr(32423), '\n')

print('unicode码对应的字符转整数：ord(c)')
print('结果：', ord('A'), ord('a'), ord('小'), '\n')

print('删除对象的属性：delattr(object, name)', '\n')
print('设置对象的属性：setattr(object, name, value)', '\n')
print('获取对象的属性：getattr(object, name)', '\n')
print('判断对象是否存在某属性：hasattr(object, name)', '\n')

import struct

print('返回对象的有效属性列表，没有参数则本地作用域的名称列表：dir([object])')
print('结果：', dir(), dir(struct), '\n')

print('它将两个（非复数）数字作为实参，并在执行整数除法时返回一对商和余数：divmod(a, b)')
print('结果：', divmod(10, 4), divmod(10, 1.5), '\n')

print('返回一个枚举对象：enumerate(iterable, start=0)')
print('结果：', list(enumerate(['apple', 'orange', 'banana'])), '\n')

print('把参数当函数/对象执行,能拿到返回值：eval(expression[, globals[, locals]])')
print('结果：', eval('foo()'), '\n')

print('动态执行 Python 代码，仅仅执行代码，不返回结果：exec(object[, globals[, locals]])')
print('结果：', exec('foo'), '\n')


def gt_10(x):
    return True if x > 10 else False


print('用 iterable 中函数 function 返回真的那些元素，构建一个新的迭代器：filter(function, iterable)')
print('结果：', list(filter(gt_10, [1, 2, 3, 4, 11, 12, 13, 14])), '\n')

print('格式化字符串：format(value[, format_spec])')
print('结果：', '{:.2f}'.format(1.23), '{:0>4d}'.format(5), '{:>10d}'.format(11), '{:b}'.format(10), '\n')

print('返回表示当前全局符号表的字典：globals()', '\n')

print('更新并返回表示当前本地符号表的字典：locals()')
print('结果：', locals(), '\n')

print('返回该对象的哈希值，多用于比较：hash(object)')
print('结果：', hash(12), hash('s'), '\n')
print('启动内置帮助系统：help([object]')
# print('结果：', help(), '\n')
print('\n')

a = 0
print('返回对象的标识值，多用于判断是否为同一个对象：id(object)')
print('结果：', id(m), id(n), id(a), id(0), '\n')
print('输入：input([prompt])')
# print('结果：', input('请输入'), '\n')
print('\n')

print('判断 object 是否为 classinfo 的实例或者是其 (直接、间接或 虚拟) 子类：isinstance(object, classinfo)')
print('结果：', isinstance('213', str), isinstance('213', int), '\n')

print('判断 class 是否为 classinfo 的(直接、间接或 虚拟) 子类：issubclass(class, classinfo)')
print('\n')

print('判断 object 是否为 classinfo 的实例或者是其 (直接、间接或 虚拟) 子类：isinstance(object, classinfo)')
print('结果：', isinstance('213', str), isinstance('213', int), '\n')

print('返回可迭代对象：iter(object[, sentinel])', iter([1, 2, 3]), '\n')

print('返回对象的长度：len(s)')
print('结果：', len('3242'), len(m), len(n), '\n')


def add(x, y):
    return x + y


print('返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器：map(function, iterable, ...)')
print('结果：', list(map(add, m, o)), '\n')

print('获取最大值：max(iterable, *[, key, default]) or max(arg1, arg2, *args[, key])')
print('结果：', max(1, 23, 4), max(m), '\n')

print('获取最小值：min(iterable, *[, key, default]) or min(arg1, arg2, *args[, key])')
print('结果：', min(23, 4), min(m), '\n')

print('返回由给定实参创建的“内存视图”对象：class memoryview(object)')
print('\n')

print('通过调用 iterator 的 __next__() 方法获取下一个元素：next(iterator[, default])')
print('\n')

print('打开文件：open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)')
print('\n')

print('返回 base 的 exp 次幂；：pow(base, exp[, mod])')
print('结果：', pow(2, 3), '\n')

print('生成range对象：class range(stop) or class range(start, stop[, step])')
print('结果：', list(range(10, 4, -2)), '\n')

print('返回反向的可迭代对象：reversed(seq)')
print('结果：', list(reversed('abcdrf')), list(reversed([1, 2, 3])), '\n')

print('返回number四舍五入到小数点后ndigits的值，倾尽于原点的方向：round(number[, ndigits])')
print('结果：', round(1.55, 1), round(4.5), round(-2.3), '\n')

print('返回set对象：set([iterable])')
print('结果：', set([1, 2, 3, 9]), '\n')

print('排序函数：sorted(iterable, *, key=None, reverse=False)')
print('结果：', sorted([1, 2, 3], reverse=True), '\n')

print('获取对象类型：type(object)')
print('结果：', type([1, 2, 3]), type(1), type('sf'), '\n')


class X:
    a = 1


print('返回新的type对象：type(name, bases, dict, **kwds)')
print('结果：', type('X', (), dict(a=1)), '\n')

print('返回模块、类、实例或任何其它具有 __dict__ 属性的对象的 __dict__ 属性：vars([object])')
print('\n')

print('创建一个聚合了来自每个可迭代对象中的元素的迭代器：zip(*iterables)')
print('结果：', list(zip([1, 2, 3], ['x', 'y', 'z'], ['a', 'b', 'c'])), '\n')

print('高级导入：__import__(name, globals=None, locals=None, fromlist=(), level=0)')
print('\n')
